package com.panpass.idempotent.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 幂等控制注解
 *
 * @author lw
 * @version 1.0.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Idempotent {
    /**
     * SpEL表达式,用于生成幂等键
     * 为空时使用默认规则生成key
     * 示例: #order.orderNo
     */
    String key() default "";

    /**
     * 重复请求时的错误提示信息
     */
    String message() default "重复请求";

    /**
     * 过期时间(秒)
     */
    long expire() default 60;

    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 方法执行完毕后是否删除key
     */
    boolean deleteKeyAfterExecution() default true;
}